|
|
Merging them into one I think would be impossible due to limitations in the
RGBFT light model. If we instead used r,g,b,rf,gf,bf (with a filter amount
for each color channel), then they could be combined easily.
However, to filter/transmit incoming light properly through two layers that
use filter and transmit, you would do something like the following:
/* first filter through the first layer */
for(i=0; i<3; i++)
Output[i] = Input[i]*Fil[TRANSM] + Input[i]*Fil[i]*Fil[FILTER];
/* now repeat fo the second layer */
Assign_Colour(Input, Output);
for(i=0; i<3; i++)
Output[i] = Input[i]*Fil[TRANSM] + Input[i]*Fil[i]*Fil[FILTER];
-Nathan
Matthew Corey Brown - XenoArch <mcb### [at] xenoarchcom> wrote...
> i have 2 colors with various FILTER and TRANSM values.. lets call them
> front and back
> how do i combine these two colors such that the resulting color
> will filter light as if it came through the back one first then the
> front.
> I can get the RGB values... but the FILTER value is tricky (I think i
> got
> the TRANSM just multiply the two) any pointers?
> this is my current function i'm working with (I realize FILTER is no
> where near right)
>
> void MergeColour(COLOUR Fil,COLOUR Back) {
> DBL mask,fm;
> mask = 1.0-Fil[TRANSM];
> fm = Fil[FILTER]*mask;
> Fil[RED] = Back[RED]*Fil[RED]*fm + Fil[RED]*mask +
> Back[RED]*Fil[TRANSM];
> Fil[GREEN] = Back[GREEN]*Fil[GREEN]*fm + Fil[GREEN]*mask +
> Back[GREEN]*Fil[TRANSM];
> Fil[BLUE] = Back[BLUE]*Fil[BLUE]*fm + Fil[BLUE]*mask +
> Back[BLUE]*Fil[TRANSM];
> Fil[FILTER] *= Back[FILTER];
> Fil[TRANSM] *= Back[TRANSM];
> }
>
> --
> Matthew Corey Brown XenoArch
> mcb### [at] xenoarchcom http://www.xenoarch.com
Post a reply to this message
|
|